package br.ucb.cesbdao.persistencia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import br.ucb.cesbdao.beans.Grupo;
import br.ucb.cesbdao.persistencia.AbstractConnectionDAO;

public class GrupoDAO extends AbstractConnectionDAO{
	
	public GrupoDAO(Connection con) {
		super(con);
	}
	
	public  int addGrupo(Grupo grupo)throws SQLException, ClassNotFoundException{
		String sql="INSERT INTO daoGrupo values(null,?,?,?,?,?,?)";
		PreparedStatement instrucao= getConexao().prepareStatement(sql);
		instrucao.setInt(1, grupo.getNumeroGrupo());
		instrucao.setString(2, grupo.getNome());
		instrucao.setInt(3, grupo.getDiaSemana());
		instrucao.setString(4, grupo.getHorarioInicial());
		instrucao.setString(5, String.valueOf(grupo.getStatus()));
		instrucao.setString(6, grupo.getHorarioFinal());
		int retorno = instrucao.executeUpdate(); 
		instrucao.close();
		return retorno;
	}
		
	public  ArrayList<Grupo> consultaGrupoNome(String nome) throws SQLException,ClassNotFoundException{
		String sqlConsultaByNome = "SELECT * FROM daoGrupo WHERE idGrupo > 0 AND nomeGrupo LIKE";
		Statement instrucao=getConexao().prepareStatement(sqlConsultaByNome);
		sqlConsultaByNome=sqlConsultaByNome+"'%"+nome+"%'";
		ResultSet rs=instrucao.executeQuery(sqlConsultaByNome);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next())
			grupos.add(new Grupo(rs.getInt("idGrupo"),
					 rs.getInt("numeroGrupo"),
					 rs.getString("nomeGrupo"),
				     rs.getInt("diaSemana"),
					 rs.getString("horario"), 
					 rs.getString("status").charAt(0),
					 rs.getString("horarioFinal")));
		rs.close();
		return grupos;
		
	}
	
	public  ArrayList<Grupo> consultaGrupoDia(int dia) throws SQLException,ClassNotFoundException{
		String sqlConsultaByDia = "SELECT * FROM daoGrupo WHERE idGrupo > 0 AND diaSemana LIKE";
		Statement instrucao=getConexao().prepareStatement(sqlConsultaByDia);
		sqlConsultaByDia=sqlConsultaByDia+"'%"+dia+"%'";
		ResultSet rs=instrucao.executeQuery(sqlConsultaByDia);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next())
			grupos.add(new Grupo(rs.getInt("idGrupo"),
								 rs.getInt("numeroGrupo"),
								 rs.getString("nomeGrupo"),
							     rs.getInt("diaSemana"),
								 rs.getString("horario"), 
								 rs.getString("status").charAt(0),
								 rs.getString("horarioFinal")));
		rs.close();
		return grupos;
		
	}
	
	public  int alteraGrupoStatus(Grupo grupo, int id) throws SQLException, ClassNotFoundException{
		String sql="UPDATE daoGrupo SET status = ?  WHERE idGrupo = ?";
		PreparedStatement instrucao=getConexao().prepareStatement(sql);
		instrucao.setString(1,String.valueOf(grupo.getStatus()));
		instrucao.setInt(2, id);
		int retorno=instrucao.executeUpdate();
		instrucao.close();
		return retorno;
	}
		
	public  ArrayList<Grupo> consultaGrupoDiretoria(String diretoria) throws SQLException,ClassNotFoundException{
		String sqlConsultaByDiretoria = "SELECT * FROM daoGrupo WHERE idGrupo > 0 AND diretoria LIKE";
		Statement instrucao=getConexao().prepareStatement(sqlConsultaByDiretoria);
		sqlConsultaByDiretoria=sqlConsultaByDiretoria+"'%"+diretoria+"%'";
		ResultSet rs=instrucao.executeQuery(sqlConsultaByDiretoria);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next()){
			Grupo grupo= new Grupo
			(rs.getInt("idGrupo"),
					 rs.getInt("numeroGrupo"),
					 rs.getString("nomeGrupo"),
				     rs.getInt("diaSemana"),
					 rs.getString("horario"), 
					 rs.getString("status").charAt(0),
					 rs.getString("horarioFinal"));
			grupos.add(grupo);
		}
		rs.close();
		return grupos;
		
	}
	public  Grupo consultaGrupoID(Integer id) throws SQLException,ClassNotFoundException{
		String sqlConsultaByID = "SELECT  * FROM daoGrupo WHERE idGrupo = ";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsultaByID);
		sqlConsultaByID=sqlConsultaByID+id;
		ResultSet rs=instrucao.executeQuery(sqlConsultaByID);
		Grupo grupo = null;
		if(rs.first())
			grupo=new Grupo
			        (rs.getInt("idGrupo"),
					 rs.getInt("numeroGrupo"),
					 rs.getString("nomeGrupo"),
				     rs.getInt("diaSemana"),
					 rs.getString("horario"), 
					 rs.getString("status").charAt(0),
					 rs.getString("horarioFinal"));
		rs.close();
		return grupo;	
	}	
	public  ArrayList<Grupo> consultaGrupo() throws SQLException,ClassNotFoundException{
		String sqlConsulta = "SELECT * FROM daoGrupo WHERE idGrupo > 0 ORDER BY nomeGrupo";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsulta);
		ResultSet rs=instrucao.executeQuery(sqlConsulta);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next())
			grupos.add(new Grupo
					(rs.getInt("idGrupo"),
							 rs.getInt("numeroGrupo"),
							 rs.getString("nomeGrupo"),
						     rs.getInt("diaSemana"),
							 rs.getString("horario"), 
							 rs.getString("status").charAt(0),
							 rs.getString("horarioFinal"))
			);
		rs.close();
		return grupos;	
	}	
	public  ArrayList<Grupo> consultaGrupoByStatus() throws SQLException,ClassNotFoundException{
		String sqlConsultaByStatus = "SELECT * FROM daoGrupo WHERE status = 'A'  AND idGrupo > 0 ORDER By nomeGrupo";
		PreparedStatement instrucao=getConexao().prepareStatement(sqlConsultaByStatus);
		ResultSet rs=instrucao.executeQuery(sqlConsultaByStatus);
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		while(rs.next())
			grupos.add(new Grupo
					(rs.getInt("idGrupo"),
					 rs.getInt("numeroGrupo"),
					 rs.getString("nomeGrupo"),
				     rs.getInt("diaSemana"),
					 rs.getString("horario"), 
					 rs.getString("status").charAt(0),
					 rs.getString("horarioFinal"))
			);
		rs.close();
		return grupos;	
	}
	

	public  boolean excluiGrupo(Grupo grupo) throws  SQLException, ClassNotFoundException{
		boolean sucesso;
		String sql="DELETE FROM daoGrupo where codigoGrupo=?";
		PreparedStatement instrucao=getConexao().prepareStatement(sql);
		instrucao.setInt(1, grupo.getIdGrupo());
		sucesso=instrucao.execute();
		instrucao.close();
		return sucesso;
	}
	
	public  int alteraGrupo(char status, int id) throws SQLException, ClassNotFoundException{
		String sql="UPDATE daoGrupo SET status = ? WHERE idgrupo = ?";
		PreparedStatement instrucao=getConexao().prepareStatement(sql);
		instrucao.setString(1,String.valueOf(status));
		instrucao.setInt(2, id);
		int sucesso = instrucao.executeUpdate();
		instrucao.close();
		return sucesso;
	}
	
	public  boolean alteraGrupo (Grupo grupo, int id) throws SQLException, ClassNotFoundException{
		String sql="UPDATE daoGrupo SET numeroGrupo = ?, nomeGrupo = ?, diaSemana = ?, horario = ?, horarioFinal = ? WHERE idGrupo = ?";
		PreparedStatement instrucao=getConexao().prepareStatement(sql);
		instrucao.setInt(1, grupo.getNumeroGrupo());
		instrucao.setString(2, grupo.getNome());
		instrucao.setInt(3, grupo.getDiaSemana());
		instrucao.setString(4, grupo.getHorarioInicial());
		instrucao.setString(5,grupo.getHorarioFinal());
		instrucao.setInt(6, id);
		instrucao.executeUpdate();
		instrucao.close();
		return true;
	}
}
